// const obj = {
//   name: 'will',
//   age: 24
// }

// Object.defineProperty(obj,'name',{
//   configurable: true,
//   value: 'hehuan',
//   enumerable: false,
//   writable: false
// })

// for(let item in obj) {
//   console.log(item)
// }

// Object.defineProperty(obj,'sayname',{
//   get() {
//     return this.name
//   },
//   set(name) {
//     this.name = name
//   }
// })
// console.log(obj.sayname)
// obj.sayname = '何欢'
// console.log(obj.sayname)


// const obj = {}
// Object.defineProperties(obj, {
//   year_: {
//     value: '2022',
//     writable: true,
//     configurable: true,
//     enumerable: true
//   },
//   edition: {
//     value: 1,
//     writable:true,
//     enumerable: true,
//     configurable: true
//   },
//   year: {
//     get() {
//       return this.year_
//     },
//     set(newYear){
//       if(newYear > 2018) {
//         this.year_ = newYear
//         this.edition += newYear - 2017
//       }
//     }
//   }
// })
// console.log(Object.getOwnPropertyDescriptor(obj,'year_'))

// console.log(Object.getOwnPropertyDescriptors(obj))

// 合并对象

// console.log(Object.assign({},{name:'will'},{age:24}))

//Object.propertyIsEnumerable() 返回true Object.hasProperty()返回true 的属性被复制


// const dest = {
//   getName() {

//   }
// }
// const src = {
//   setName() {

//   }
// }
// console.log(Object.assign(dest,src))

// console.log(Object.is(NaN,NaN))
// console.log(Object.is('22',22))
// console.log(Object.is(true,1))
// console.log(Object.is(+0,0))
// function recursivelyCheckEqual(x,...rest){
//   return Object.is(x,rest[0]) &&
//   (rest.length < 2) || recursivelyCheckEqual(...rest)
// }
// console.log(recursivelyCheckEqual(NaN,33,111))


// const newObj = {
//   name_: '',
//   set name(name) {
//     this.name_ = name
//   },
//   get name() {
//     return this.name_
//   },
//   sayName() {
//     console.log(`My name is ${this.name_}`)
//   }
// }
// newObj.name = '何欢'
// newObj.sayName()
// 对象的结构复制
// const {name:personName,age:personAge,sex,gender='男人'} = {name:'will',age:24}
// console.log(personName,personAge,sex,gender) // sex 等于undefined

// 结构的时候提供默认值

// let person = {
//   name: 'will',
//   age: 24
// }
// function printPerson(foo,{name,age},bar) {
//   console.log(arguments)
//   console.log(foo,name,age,bar)
// }
// printPerson('1st',person,'2nd')
